﻿using System;
using web_uchet.Models;
using System.Linq;
using System.Collections.Generic;

namespace web_uchet.ViewModels
{
    interface IViewOrderChanges
    {
        Заказ Заказ { get;}
        System.Data.Objects.DataClasses.EntityReference<Заказ> ЗаказReference { get;}
        Int64 ИД_Изменения { get; }
        string Новое_Значение { get; }
        Пользователь Пользователь { get; }
        System.Data.Objects.DataClasses.EntityReference<Пользователь> ПользовательReference { get;}
        string Старое_Значение { get;}
        Изменение_Заказа OrderChange { get; }
        Int64 ИД_Заказа { get; }
    }
    public class ViewOrderChanges:IViewOrderChanges
    {
        public ViewOrderChanges(Изменение_Заказа OrderChange)
        {
            this._OrderChange = OrderChange;
        }
        private Изменение_Заказа _OrderChange;
        #region IViewOrderChanges Members

        public Изменение_Заказа OrderChange
        {
            get
            {
                return this._OrderChange;
            }

        }

        public Int64 ИД_Изменения
        {
            get
            {
                return this._OrderChange.ИД_Изменения;
            }
        }

        public string Новое_Значение
        {
            get
            {
                return this._OrderChange.Новое_Значение;
            }
        }

        public Пользователь Пользователь
        {
            get
            {
                return this._OrderChange.Пользователь;
            }            
        }

        public string Старое_Значение
        {
            get
            {
                return this._OrderChange.Старое_Значение;
            }
        }
        public System.Data.Objects.DataClasses.EntityReference<Заказ> ЗаказReference
        {
            get
            {
                return this._OrderChange.ЗаказReference;
            }
        }

        public System.Data.Objects.DataClasses.EntityReference<Пользователь> ПользовательReference
        {
            get
            {
                return this._OrderChange.ПользовательReference;
            }
        }
        public Заказ  Заказ
        {
	        get{return this._OrderChange.Заказ;}
        }
        public Int64 ИД_Заказа
        {
            get
            {
                return Convert.ToInt64(this.ЗаказReference.EntityKey.EntityKeyValues.First(e => e.Key == "ИД_Заказа").Value);
            }
        }
        #endregion
}

    public class ViewOrderChangesOperationProvider
    {
        public ViewOrderChangesOperationProvider(web_uchet.Security.ProgramContext MData)
        {
            this.SecurityContext = MData;
            this._Context = new ModelWebUchetCon(ModelWebUchetCon.SingleToneConnection);
        }
        private web_uchet.Security.ProgramContext SecurityContext;
        private ModelWebUchetCon _Context;

        public ViewOrderChangesOperationProvider(ModelWebUchetCon Context, web_uchet.Security.ProgramContext MData)
        {
            this.SecurityContext = MData;
            this._Context = Context;
        }

        //в CompanyID - ID компании для которой делаем LIST
        public IEnumerable<ViewOrderChanges> List()
        {
            return this._Context.Изменения_Заказов
                .Include("Пользователь").Include("Заказ")
                .Where(e => e.Компания.ИД_Компании == this.SecurityContext.CompanyID)
                //.OrderByDescending(e=>e.ИД_Изменения)
                .ToList()
                .Select(e => new ViewOrderChanges(e));
        }

        public IQueryable<Изменение_Заказа> IQueryableOrderChanges()
        {
            return this._Context.Изменения_Заказов
                .Include("Пользователь")//.Include("Заказ")
                .Where(e => e.Компания.ИД_Компании == this.SecurityContext.CompanyID)
                //.OrderByDescending(e=>e.ИД_Изменения)
                ;
        }        
    }
}
